/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.evangelion.core.daoImpl;

import com.evangelion.core.bean.Alumno;
import com.evangelion.core.bean.Examen;
import com.evangelion.core.bean.Seccione;
import com.evangelion.core.dao.ExamenDao;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;

/**
 *
 * @author Usuario
 */
@Repository
public class ExamenDaoImpl extends GenericDaoImpl<Serializable> implements ExamenDao {

    @Override
    public List<Examen> findByRangeDate(Seccione seccion, Date fechadesde, Date fechahasta, String prueba) {
        em = getEntityManager();
        Query q = null;
        if (prueba.equals("Practico")) {
            q = em.createQuery("SELECT a from Examen a WHERE a.seccion = :seccion AND a.fechaexamen>=:fechadesde AND a.fechaexamen<=:fechahasta AND a.prueba=:prueba");
        } else {
            q = em.createQuery("SELECT a from Examen a WHERE a.seccion = :seccion AND a.fechaexamen>=:fechadesde AND a.fechaexamen<=:fechahasta AND a.prueba<>'Teorico'");
            q.setParameter("prueba", prueba);
        }
        q.setParameter("seccion", seccion);
        q.setParameter("fechadesde", fechadesde);
        q.setParameter("fechahasta", fechahasta);



        return q.getResultList();
    }

    @Override
    public List<Examen> findByAlumnoEstado(Seccione seccion, Alumno alumno, String estado) {
        em = getEntityManager();
        Query q = em.createQuery("SELECT a from Examen a WHERE a.seccion = :seccion AND a.alumno=:alumno AND a.estadoexamen=:estado");

        q.setParameter("seccion", seccion);
        q.setParameter("alumno", alumno);
        q.setParameter("estado", estado);
        return q.getResultList();
    }

    @Override
    public List<Object[]> examenResultadoMensual(Seccione seccion, Date fechadesde, Date fechahasta) {
        em = getEntityManager();

        Query q = em.createNativeQuery("select COUNT(id), MONTH(fechaexamen), resultado from examenes WHERE resultado is NOT NULL AND fechaexamen>=? AND fechaexamen<=? AND id_seccion=? GROUP BY (YEAR(fechaexamen)),(MONTH(fechaexamen)), resultado");

        q.setParameter(1, fechadesde);
        q.setParameter(2, fechahasta);
        q.setParameter(3, seccion.getId());
        return q.getResultList();
    }
}
